Embedded computing devices (hereinafter “embedded devices”) are computing devices with specific functions which operate within a larger mechanical or electrical system. Embedded devices are used extensively in consumer, commercial, automotive, industrial and healthcare markets. Generally, the operating system of an embedded device might only run applications which help the embedded device to accomplish a specific task.
Examples of embedded devices include appliances (e.g. dishwashers), banking Automated Teller Machines (ATMs), routers, Point-of-Sale (POS) terminals, and mobile devices (e.g. mobile phones). Some embedded devices can connect to the internet or other computing devices via a network interface, and are colloquially referred to as “smart” devices.
Embedded devices typically run an operating system (OS) that manages hardware and applications. Examples of common operating systems include Unix, Android, Linux, iOS, OS X, and Ubuntu. A typical operating system allocates memory to different processes. An operating system can segregate virtual memory into user space and kernel space. The kernel of an operating system is the central core of the operating system and houses core programs. The kernel space is typically reserved for specific operations associated with the kernel. Application programs typically operate in user space.
Different operating systems may be more suitable for different purposes. For example, for a device with limited processing and storage capabilities, an operating system with a smaller footprint may be more suitable, but may offer reduced functionality and driver support. Operating systems with a larger footprint (e.g. Windows) may be more suitable for computing devices with increased processing and storage capabilities.
Some operating systems allow for multiple virtualized user space instances (referred to herein as “containers”). Separate containers can be isolated from one another, with the kernel providing resource-management features to limit the impact of one container's activities on other containers. Different operating systems can run in separate containers.
Although embedded devices may have limited resources, the use of multiple user-space instances in embedded computing systems is desirable. For example, a smartphone may run a first operating system in a first container and a second operating system in a second container. The first operating system may be responsible for work-related applications. The second operating system may be responsible for personal applications. The use of segregated containers may be desirable when applications and data are intended to be kept separate. In this example, it is desirable for confidential work-related data and applications to be kept separate from the personal applications and personal data of a user.
Because processing power and storage may be limited on an embedded device, it might not be desirable to run multiple virtualized operating systems which have a relatively large footprint (i.e. relatively high computing resource requirements). For example, running instances of both Android and iOS might not be desirable on an embedded computing system with limited resources.
There may be instances in which an operating system running in a first container supports functionality which is not supported by a second operating system. For example, a first operating system may support network connectivity via a network interface, whereas a second, less resource-intensive operating system running on the same device might not provide network connectivity. It would be desirable to share the network interface of the first operating system with the second operating system.